package com.cskaoyan.javase.string._0introduction;

/**
 * @description: String类的简介
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * > String概述
 * - 在Java语言中，所有类似“ABC”这样用双引号引起来的字符串，都是String类的对象
 *   所以这里需要额外注意一下，"hello"既是一个字面值常量，同时也是一个Java对象
 *
 * - String类位于java.lang包下，是Java语言的核心类（几乎找不到一个比它更常见、常用的类了~）
 * - String类提供了字符串表示、比较、查找、截取、大小写转换等各种针对字符串的操作
 *
 * 学习String类主要有两个目的:
 *      1.了解String自身的独特性(String虽然是引用数据类型,但他很独特)
 *      2.了解和知道String能够对字符串完成哪些操作,需要大家手动敲一下相关的代码,调用一下方法试一试
 *
 * 首先了解一下它的构造方法,使用构造方法创建String是一种不太常见的方式，仅供了解
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建空字符串对象，需要注意的是null != ""
        //public String()
        String s = new String();
        System.out.println(s.length());


        //把字节数组中的元素转换成字符串，字节数组中可以是字符，也可以是ASCII码值
        //public String(byte[] bytes)
        byte[] arr = {97, 98, 99, 100, 101, 102};
        String s1 = new String(arr);
        System.out.println(s1);

        //同上，不过指定了开始下标和长度
        //public String(byte[] bytes,int offset,int length)
        //offset可以看成数组的下标,length是长度,表示截取数组中从offset下标开始(包含),到后面长度的一段元素
        //如果超出界限会抛出StringIndexOutOfBoundsException
        String s2 = new String(arr, 3, 3);
        System.out.println(s2);

        //同字节数组
        //public String(char[] value)
        //同上，不过指定了开始下标和长度
        //public String(char[] value,int offset,int count)
        char[] arr2 = {'a', 'b', '2'};
        String s3 = new String(arr2);
        System.out.println(s3);
        String s4 = new String(arr2, 1, 2);
        System.out.println(s4);


        //套娃
        //public String(String original)
        String s5 = new String("hello");
        String s6 = "hello";
        System.out.println(s5 == s6);
        System.out.println(s5);
    }
}
